TCP/IP (Transport Control Protocol/Internet Protocol) is a commonly used protocol for applications to set up reliable end-to-end connections in the networking world. The BSD (Berkeley Domain Sockets) socket interface is a popular network-programming interface for users to implement TCP/UDP (User Datagram Protocol) based applications. The TCP protocol has the concept of a ‘listener’, which signifies a server software that waits for connections on a given TCP port.
With systems becoming more complex, the significance of distributed systems is increasing.
If the TCP protocol stack is distributed (i.e. if there are multiple instances of TCP protocol stack and sockets running) on various nodes in a distributed system, the external world still looks at the whole system as a single IP-endpoint. Due to this, the incoming TCP connection requests have the same destination-port. If there are multiple applications running on multiple nodes listening to different ports, there is a need to create a mechanism to send incoming SYN requests and further TCP segments to the appropriate listener.
The problem is more complex when multiple applications on multiple cards that listen to the same TCP port have to be supported.
Existing implementations have a centralized listener which receives packets and applications take care of distributing messages to other nodes if required.